/*-------------------------------------------------------------------------
 *
 * off.h
 *	  POSTGRES 磁盘“偏移”定义。
 *
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/storage/off.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef OFF_H
#define OFF_H

#include "storage/itemid.h"
/*
 * OffsetNumber:
 *
 * 这是每个磁盘页面头部中的 linp (ItemIdData) 数组的
 * 基于 1 的索引。
 */
typedef uint16 OffsetNumber;

#define InvalidOffsetNumber		((OffsetNumber) 0)
#define FirstOffsetNumber		((OffsetNumber) 1)
#define MaxOffsetNumber			((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))

/* ----------------
 *		支持宏
 * ----------------
 */

/*
 * OffsetNumberIsValid
 *		当且仅当偏移量编号有效时为真。
 */
#define OffsetNumberIsValid(offsetNumber) \
	((bool) ((offsetNumber != InvalidOffsetNumber) && \
			 (offsetNumber <= MaxOffsetNumber)))

/*
 * OffsetNumberNext
 * OffsetNumberPrev
 *		增加/减少参数。这些宏看起来毫无意义，
 *		但它们帮助我们对 OffsetNumbers 的不同操作进行
 *		消歧（例如，有时我们从一个 OffsetNumber 中减去一个
 *		以向后移动，有时这样做是为了形成一个真实的 C 数组索引）。
 */
#define OffsetNumberNext(offsetNumber) \
	((OffsetNumber) (1 + (offsetNumber)))
#define OffsetNumberPrev(offsetNumber) \
	((OffsetNumber) (-1 + (offsetNumber)))

#endif							/* OFF_H */
